home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 2 / MacMania 2.toast / Demo's / Tools&Utilities / Programming / Curses / curses.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-07  |  15.1 KB  |  433 lines  |  [TEXT/R*ch]

  1. #ifndef INCLUDED_CURSES_H
  2. #define INCLUDED_CURSES_H
  3.  
  4. #include <stdio.h>
  5. #include <stdarg.h>
  6.  
  7. #ifndef TRUE
  8. typedef enum { FALSE=0, TRUE=1 } bool;
  9. #else
  10. typedef unsigned    bool;
  11. #endif
  12.  
  13. #ifndef MIN
  14. #define MIN(a, b) ((a) < (b) ? (a) : (b))
  15. #endif /* MIN */
  16.  
  17. #ifndef MAX
  18. #define MAX(a, b) ((a) > (b) ? (a) : (b))
  19. #endif /* MAX */
  20.  
  21. typedef int        chtype;    /* Characters and attributes        */
  22.  
  23. #define    _SUBWIN        01
  24. #define    _ENDLINE    02
  25. #define    _FULLWIN    04
  26. #define    _SCROLLWIN    010
  27. #define    _FLUSH        020
  28. #define    _ISPAD        040
  29. #define    _WINCHANGED    0100
  30. #define    _WINMOVED    0200
  31.  
  32. typedef struct
  33. {
  34.     short    _cury, _curx;
  35.     short    _maxy, _maxx;
  36.     short    _begy, _begx;
  37.     short    _pmap_orgy, _pmap_orgx;    /* Upper left corner of most recent prefresh on pad. */
  38.     short    _pmap_maxy, _pmap_maxx;    /* Max x/y of most recent prefresh on pad. */
  39.     short    _xdim;                    /* Value to add to chtype pointer to move down a row. */
  40.     short    _flags;
  41.     chtype    _attrs;
  42.     bool    _clear;
  43.     bool    _leave;
  44.     bool    _scroll;
  45.     bool    _use_idl;    /* 0=no, 1=yes, 2=go by need_idl */
  46.     bool    _use_keypad;    /* 0=no, 1=yes, 2=yes/timeout */
  47.     bool    _use_meta;    /* T=use the meta key */
  48.     bool    _nodelay;    /* T=don't wait for tty input */
  49.     chtype    *_y;        /* Unix uses **_y */
  50.     short    *_firstch;
  51.     short    *_lastch;
  52.     bool    _notimeout;    /* T=do wait for rest of function key */
  53.     bool    _need_idl;    /* T=have done ins/del line/scroll recently */
  54.     short    _tmarg,_bmarg;    /* Scrolling rows */
  55. } WINDOW;
  56.  
  57. typedef void    *SCREEN;        /* newterm()/setterm() not supported */
  58.  
  59. #define    ERR    (-1)
  60. #define    OK    (1)
  61.  
  62. /****
  63. * These two macros convert window-relative cursor position to screen-relative:
  64. ****/
  65.  
  66. #define _CURS_CURSOR_SCREEN_ROW(w) ((w)->_begy + (w)->_cury - \
  67.     (((w)->_flags & _ISPAD) ? (w)->_pmap_orgy : 0))
  68. #define _CURS_CURSOR_SCREEN_COL(w) ((w)->_begx + (w)->_curx - \
  69.     (((w)->_flags & _ISPAD) ? (w)->_pmap_orgx : 0))
  70.  
  71. #ifdef THINK_C
  72.  
  73. #include <macurses.h>
  74.  
  75. extern bool    maccur_init        (void);
  76. extern int    maccur_refresh    (WINDOW *win, bool outflag);
  77. extern bool    maccur_end        (void);
  78. extern void    maccur_beep        (int flag);
  79. extern int    maccur_kbinp    (WINDOW *win, bool raw, bool cbreak);
  80. extern void maccur_flush_typeahead(void);
  81.  
  82. #define CURS_INIT_FN maccur_init
  83. #define CURS_REFRESH_FN maccur_refresh
  84. #define CURS_END_FN maccur_end
  85. #define CURS_BEEP_FN maccur_beep
  86. #define CURS_KBINP_FN maccur_kbinp
  87. #define CURS_FLUSHINP_FN maccur_flush_typeahead
  88.  
  89. #else
  90.  
  91. /*
  92.  * External, machine-specific entry points:
  93.  */
  94.  
  95. extern bool    ms_init        (void);
  96. extern int    ms_refresh    (WINDOW *win, bool outflag);
  97. extern bool    ms_end        (void);
  98. extern void ms_restore_scrn    (void);
  99. extern void    ms_beep        (int flag);
  100. extern int    ms_kbinp    (WINDOW *win, bool raw, bool cbreak);
  101. extern void ms_flushinp    (void);
  102.  
  103. #define CURS_INIT_FN ms_init
  104. #define CURS_REFRESH_FN ms_refresh
  105. #define CURS_END_FN ms_end
  106. #define CURS_BEEP_FN ms_beep
  107. #define CURS_KBINP_FN ms_kbinp
  108. #define CURS_FLUSHINP_FN ms_flushinp
  109.  
  110. #endif /* THINK_C */
  111.  
  112. extern char*    _curses_prntw;        /* printw() buffer        */
  113. extern unsigned    _curses_prntw_size;    /* Nbr chars in printw() buffer    */
  114. extern int _curses_tab_wid;            /* Width of tab (defaults to 8). */
  115. extern WINDOW*    stdscr;            /* Default terminal window    */
  116. extern int    COLS;            /* Nbr columns in screen    */
  117. extern int    LINES;            /* Nbr lines in screen        */
  118.  
  119. #define    addch(ch)        waddch(stdscr, ch)
  120. #define    getch()            wgetch(stdscr)
  121. #define    addstr(str)        waddstr(stdscr, str)
  122. #define    getstr(str)        wgetstr(stdscr, str)
  123. #define    move(y, x)        wmove(stdscr, y, x)
  124. #define    clear()            wclear(stdscr)
  125. #define    erase()            werase(stdscr)
  126. #define    clrtobot()        wclrtobot(stdscr)
  127. #define    clrtoeol()        wclrtoeol(stdscr)
  128. #define    insertln()        winsertln(stdscr)
  129. #define    deleteln()        wdeleteln(stdscr)
  130. #define    refresh()        wrefresh(stdscr)
  131. #define    inch()            winch(stdscr)
  132. #define    insch(c)        winsch(stdscr,c)
  133. #define    delch()            wdelch(stdscr)
  134. #define    standout()        wstandout(stdscr)
  135. #define    standend()        wstandend(stdscr)
  136. #define    attron(at)        wattron(stdscr,at)
  137. #define    attroff(at)        wattroff(stdscr,at)
  138. #define    attrset(at)        wattrset(stdscr,at)
  139. #define    echochar(ch)        wechochar(stdscr, ch)
  140.  
  141. #define    setscrreg(t,b)        wsetscrreg(stdscr, t, b)
  142. #define    wsetscrreg(win,t,b)    (win->_tmarg=(t),win->_bmarg=(b))
  143.  
  144. #define crmode()        nocbreak()
  145.  
  146. /*
  147.  * mv functions
  148.  */
  149.  
  150. #define    mvwaddch(win,y,x,c)    (wmove(win,y,x)==ERR?ERR:waddch(win,c))
  151. #define    mvwgetch(win,y,x)    (wmove(win,y,x)==ERR?ERR:wgetch(win))
  152. #define    mvwaddstr(win,y,x,s)    (wmove(win,y,x)==ERR?ERR:waddstr(win,s))
  153. #define    mvwgetstr(win,y,x,s)    (wmove(win,y,x)==ERR?ERR:wgetstr(win,s))
  154. #define    mvwinch(win,y,x)    (wmove(win,y,x)==ERR?ERR:winch(win))
  155. #define    mvwdelch(win,y,x)    (wmove(win,y,x)==ERR?ERR:wdelch(win))
  156. #define    mvwinsch(win,y,x,c)    (wmove(win,y,x)==ERR?ERR:winsch(win,c))
  157. #define    mvaddch(y,x,ch)        mvwaddch(stdscr,y,x,ch)
  158. #define    mvgetch(y,x)        mvwgetch(stdscr,y,x)
  159. #define    mvaddstr(y,x,str)    mvwaddstr(stdscr,y,x,str)
  160. #define    mvgetstr(y,x,str)    mvwgetstr(stdscr,y,x,str)
  161. #define    mvinch(y,x)        mvwinch(stdscr,y,x)
  162. #define    mvdelch(y,x)        mvwdelch(stdscr,y,x)
  163. #define    mvinsch(y,x,c)        mvwinsch(stdscr,y,x,c)
  164.  
  165. /*
  166.  * psuedo functions
  167.  */
  168.  
  169. #define    getyx(win,y,x)        (y = win->_cury, x = win->_curx)
  170. #define    getbegyx(win,y,x)    (y = win->_begy, x = win->_begx)
  171. #define    getmaxyx(win,y,x)    (y = win->_maxy, x = win->_maxx)
  172. #define    getsyx(y,x)        (_getsyx(&y,&x))
  173. #define    winch(win)        (win->_y[win->_cury*win->_maxx+win->_curx])
  174.  
  175. #define    clearok(win,bf)        ((win)->_clear = (bf))
  176. #define    leaveok(win,bf)        ((win)->_leave = (bf))
  177. #define    scrollok(win,bf)    ((win)->_scroll = (bf))
  178.  
  179. extern int    alarm        (void);
  180. extern int    beep        (void);
  181. extern int    box            (WINDOW *win, chtype vertch, chtype horch);
  182. extern int    cbreak        (void);
  183. extern int copywin        (WINDOW *src_win, WINDOW *dst_win,
  184.                          int sminy, int sminx, int dminy, int dminx,
  185.                          int dmaxy, int dmaxx, bool overlay_flag);
  186. extern int    delwin        (WINDOW *win);
  187. extern int    doupdate    (void);
  188. extern int    echo        (void);
  189. extern int    endwin        (void);
  190. extern int    flushinp    (void);
  191. extern int    halfdelay    (int tenths);
  192. extern WINDOW    *initscr    (void);
  193. extern int    intrflush    (WINDOW *win, bool flag);
  194. extern bool    isendwin    (void);
  195. extern int    keypad        (WINDOW *win, bool flag);
  196. extern int    meta        (WINDOW *win, bool flag);
  197. extern int    mvprintw    (int y, int x, char *fmt, ...);
  198. extern int    mvscanw    (int y, int x, char *fmt, ...);
  199. extern int    mvwin        (WINDOW *win, int y, int x);
  200. extern int    mvwprintw    (WINDOW *win, int y, int x, char *fmt, ...);
  201. extern int    mvwscanw    (WINDOW *win, int y, int x, char *fmt, ...);
  202. extern WINDOW    *newpad        (int nlines, int ncols);
  203. extern WINDOW    *newwin        (int nlines, int ncols, int beg_y, int beg_x);
  204. extern int    nl        (void);
  205. extern int    nocbreak    (void);
  206. extern int    nodelay        (WINDOW *win, bool flag);
  207. extern int    noecho        (void);
  208. extern int    nonl        (void);
  209. extern int    noraw        (void);
  210. extern int    notimeout    (WINDOW *win, bool flag);
  211. extern int    overwrite    (WINDOW *src_win, WINDOW *dst_win);
  212. extern int    overlay        (WINDOW *src_win, WINDOW *dst_win);
  213. extern int    pnoutrefresh(WINDOW *pad, int pminy, int pminx,
  214.                          int sminy, int sminx, int smaxy, int smaxx);
  215. extern int    prefresh    (WINDOW *pad, int pminy, int pminx,
  216.                          int sminy, int sminx, int smaxy, int smaxx);
  217. extern int    printw        (char *fmt, ...);
  218. extern int    raw        (void);
  219. extern int    scanw        (char *fmt, ...);
  220. extern int    scroll        (WINDOW *win);
  221. extern WINDOW*    subpad    (WINDOW *parnt_pad, int nlines, int ncols, int beg_y, int beg_x);
  222. extern WINDOW*    subwin    (WINDOW *parnt_win, int nlines, int ncols, int beg_y, int beg_x);
  223. extern int    touchline    (WINDOW *win, int start, int count);
  224. extern int    touchwin    (WINDOW *win);
  225. extern int    ungetch        (chtype ch);
  226. extern int    vwprintw    (WINDOW *win, char *fmt, va_list ap);
  227. extern int    vwscanw        (WINDOW *win, char *fmt, va_list ap);
  228. extern int    waddch        (WINDOW *win, chtype ch);
  229. extern int    waddstr        (WINDOW *win, char *str);
  230. extern int    wattroff    (WINDOW *win, chtype attrs);
  231. extern int    wattron        (WINDOW *win, chtype attrs);
  232. extern int    wattrset    (WINDOW *win, chtype attrs);
  233. extern int    wclear        (WINDOW *win);
  234. extern int    wclrtobot    (WINDOW *win);
  235. extern int    wclrtoeol    (WINDOW *win);
  236. extern int    wdelch        (WINDOW *win);
  237. extern int    wdeleteln    (WINDOW *win);
  238. extern int    wechochar    (WINDOW *win, chtype ch);
  239. extern int    werase        (WINDOW *win);
  240. extern int    wgetch        (WINDOW *win);
  241. extern int    wgetstr        (WINDOW *win, char *str);
  242. extern int    winsch        (WINDOW *win, chtype ch);
  243. extern int    winsertln    (WINDOW *win);
  244. extern int    wmove        (WINDOW *win, int ypos, int xpos);
  245. extern int    wnoutrefresh    (WINDOW *win);
  246. extern int    wprintw        (WINDOW *win, char *fmt, ...);
  247. extern int    wrefresh    (WINDOW *win);
  248. extern int    wscanw        (WINDOW *win, char *fmt, ...);
  249. extern int    wstandend    (WINDOW *win);
  250. extern int    wstandout    (WINDOW *win);
  251.  
  252. #define    A_STANDOUT    0000200
  253. #define    A_UNDERLINE    0000400
  254. #define    A_REVERSE    0001000
  255. #define    A_BLINK        0002000
  256. #define    A_DIM        0004000
  257. #define    A_BOLD        0010000
  258. #define    A_ALTCHARSET    0100000
  259. #define    A_NORMAL    0000000
  260.  
  261. #define    _STANDOUT    A_STANDOUT
  262.  
  263. #define    A_CHARTEXT    0177
  264. #define    A_ATTRIBUTES    (~A_CHARTEXT)
  265.  
  266. /*
  267.  * Line drawing and special display characters:
  268.  */
  269.  
  270. #ifdef THINK_C
  271.  
  272. #define    ACS_HLINE    '-'
  273. #define    ACS_VLINE    '|'
  274. #define    ACS_ULCORNER    '*'
  275. #define    ACS_LLCORNER    '*'
  276. #define    ACS_URCORNER    '*'
  277. #define    ACS_LRCORNER    '*'
  278.  
  279. #else
  280.  
  281. #define    ACS_BSSB    (acs_map['l'])
  282. #define    ACS_SSBB    (acs_map['m'])
  283. #define    ACS_BBSS    (acs_map['k'])
  284. #define    ACS_SBBS    (acs_map['j'])
  285. #define    ACS_SBSS    (acs_map['u'])
  286. #define    ACS_SSSB    (acs_map['t'])
  287. #define    ACS_SSBS    (acs_map['v'])
  288. #define    ACS_BSSS    (acs_map['w'])
  289. #define    ACS_BSBS    (acs_map['q'])
  290. #define    ACS_SBSB    (acs_map['x'])
  291. #define    ACS_SSSS    (acs_map['n'])
  292.  
  293. #define    ACS_SBBS    (acs_map['j'])
  294. #define    ACS_BBSS    (acs_map['k'])
  295. #define    ACS_BSSB    (acs_map['l'])
  296. #define    ACS_SSBB    (acs_map['m'])
  297. #define    ACS_SSSS    (acs_map['n'])
  298. #define    ACS_BSBS    (acs_map['q'])
  299. #define    ACS_SSSB    (acs_map['t'])
  300. #define    ACS_SBSS    (acs_map['u'])
  301. #define    ACS_SSBS    (acs_map['v'])
  302. #define    ACS_BSSS    (acs_map['w'])
  303. #define    ACS_SBSB    (acs_map['x'])
  304.  
  305. #define    ACS_ULCORNER    ACS_BSSB
  306. #define    ACS_LLCORNER    ACS_SSBB
  307. #define    ACS_URCORNER    ACS_BBSS
  308. #define    ACS_LRCORNER    ACS_SBBS
  309. #define    ACS_RTEE    ACS_SBSS
  310. #define    ACS_LTEE    ACS_SSSB
  311. #define    ACS_BTEE    ACS_SSBS
  312. #define    ACS_TTEE    ACS_BSSS
  313. #define    ACS_HLINE    ACS_BSBS
  314. #define    ACS_VLINE    ACS_SBSB
  315. #define    ACS_PLUS    ACS_SSSS
  316.  
  317. #define    ACS_S1        (acs_map['o'])        /* scan line 1 */
  318. #define    ACS_S9        (acs_map['s'])        /* scan line 9 */
  319. #define    ACS_DIAMOND    (acs_map['`'])        /* diamond */
  320. #define    ACS_CKBOARD    (acs_map['a'])        /* checkerboard */
  321. #define    ACS_DEGREE    (acs_map['f'])        /* degree symbol */
  322. #define    ACS_PLMINUS    (acs_map['g'])        /* plus/minus */
  323. #define    ACS_BULLET    (acs_map['~'])        /* bullet */
  324. #define    ACS_LARROW    (acs_map[','])        /* left arrow */
  325. #define    ACS_RARROW    (acs_map['+'])        /* right arrow */
  326. #define    ACS_DARROW    (acs_map['.'])        /* down arrow */
  327. #define    ACS_UARROW    (acs_map['-'])        /* up arrow */
  328. #define    ACS_BOARD    (acs_map['h'])        /* board of squares */
  329. #define    ACS_LANTERN    (acs_map['i'])        /* lantern symbol */
  330. #define    ACS_BLOCK    (acs_map['0'])        /* solid square block */
  331.  
  332. extern chtype acs_map[];
  333.  
  334. #endif /* THINK_C */
  335.  
  336. #define    KEY_BREAK    0401        /* break key (unreliable) */
  337. #define    KEY_DOWN    0402        /* terminal down arrow key */
  338. #define    KEY_UP        0403        /* terminal up arrow key */
  339. #define    KEY_LEFT    0404        /* terminal left arrow key */
  340. #define    KEY_RIGHT    0405        /* terminal right arrow key */
  341. #define    KEY_HOME    0406        /* home key */
  342. #define    KEY_BACKSPACE    0407        /* backspace key */
  343. #define    KEY_F0        0410        /* function key f0 */
  344. #define    KEY_F(n)    (KEY_F0+(n))    /* Up to 64 function keys */
  345. #define    KEY_DL        0510        /* delete line key */
  346. #define    KEY_IL        0511        /* insert line */
  347. #define    KEY_DC        0512        /* delete character key */
  348. #define    KEY_IC        0513        /* ins chr/ins mode key */
  349. #define    KEY_EIC        0514        /* rmir/smir in insert mode x */
  350. #define    KEY_CLEAR    0515        /* clear screen or erase key */
  351. #define    KEY_EOS        0516        /* clear-to-end-of-screen key x */
  352. #define    KEY_EOL        0517        /* clear-to-end-of-line key x */
  353. #define    KEY_SF        0520        /* scroll-forward/down key */
  354. #define    KEY_SR        0521        /* scroll-backward/up key */
  355. #define    KEY_NPAGE    0522        /* next-page key */
  356. #define    KEY_PPAGE    0523        /* previous-page key */
  357. #define    KEY_STAB    0524        /* set-tab key x */
  358. #define    KEY_CTAB    0525        /* clear-tab key x */
  359. #define    KEY_CATAB    0526        /* clear-all-tabs key x */
  360. #define    KEY_ENTER    0527        /* Enter/send (unreliable) */
  361. #define    KEY_SRESET    0530        /* soft reset (unreliable) x */
  362. #define    KEY_RESET    0531        /* hard reset (unreliable) x */
  363. #define    KEY_PRINT    0532        /* print or copy x */
  364. #define    KEY_LL        0533        /* home-down key x */
  365.                      /* The keypad is arranged    */
  366.                     /* as follows:            */
  367.                     /*    a1    up    a3        */
  368.                     /*   left   b2  right        */
  369.                     /*    c1   down   c3        */
  370. #define    KEY_A1        0534        /* Upper left of keypad */
  371. #define    KEY_A3        0535        /* Upper right of keypad */
  372. #define    KEY_B2        0536        /* Center of keypad */
  373. #define    KEY_C1        0537        /* Lower left of keypad */
  374. #define    KEY_C3        0540        /* Lower right of keypad */
  375. #define    KEY_BTAB    0541        /* Back tab key x */
  376. #define    KEY_BEG        0542        /* beg(inning) key x */
  377. #define    KEY_CANCEL    0543        /* cancel key x */
  378. #define    KEY_CLOSE    0544        /* close key x */
  379. #define    KEY_COMMAND    0545        /* cmd (command) key x */
  380. #define    KEY_COPY    0546        /* copy key x */
  381. #define    KEY_CREATE    0547        /* create key x */
  382. #define    KEY_END        0550        /* end key */
  383. #define    KEY_EXIT    0551        /* exit key x */
  384. #define    KEY_FIND    0552        /* find key x */
  385. #define    KEY_HELP    0553        /* help key x */
  386. #define    KEY_MARK    0554        /* mark key x */
  387. #define    KEY_MESSAGE    0555        /* message key x */
  388. #define    KEY_MOVE    0556        /* move key x */
  389. #define    KEY_NEXT    0557        /* next object key x */
  390. #define    KEY_OPEN    0560        /* open key x */
  391. #define    KEY_OPTIONS    0561        /* options key x */
  392. #define    KEY_PREVIOUS    0562        /* previous object key x */
  393. #define    KEY_REDO    0563        /* redo key x */
  394. #define    KEY_REFERENCE    0564        /* ref(erence) key x */
  395. #define    KEY_REFRESH    0565        /* refresh key x */
  396. #define    KEY_REPLACE    0566        /* replace key x */
  397. #define    KEY_RESTART    0567        /* restart key x */
  398. #define    KEY_RESUME    0570        /* resume key x */
  399. #define    KEY_SAVE    0571        /* save key x */
  400. #define    KEY_SBEG    0572        /* shifted beginning key x */
  401. #define    KEY_SCANCEL    0573        /* shifted cancel key x */
  402. #define    KEY_SCOMMAND    0574        /* shifted command key x */
  403. #define    KEY_SCOPY    0575        /* shifted copy key x */
  404. #define    KEY_SCREATE    0576        /* shifted create key x */
  405. #define    KEY_SDC        0577        /* shifted delete char key x */
  406. #define    KEY_SDL        0600        /* shifted delete line key x */
  407. #define    KEY_SELECT    0601        /* select key x */
  408. #define    KEY_SEND    0602        /* shifted end key x */
  409. #define    KEY_SEOL    0603        /* shifted clear line key x */
  410. #define    KEY_SEXIT    0604        /* shifted exit key x */
  411. #define    KEY_SFIND    0605        /* shifted find key x */
  412. #define    KEY_SHELP    0606        /* shifted help key x */
  413. #define    KEY_SHOME    0607        /* shifted home key x */
  414. #define    KEY_SIC        0610        /* shifted input key x */
  415. #define    KEY_SLEFT    0611        /* shifted left arrow key */
  416. #define    KEY_SMESSAGE    0612        /* shifted message key x */
  417. #define    KEY_SMOVE    0613        /* shifted move key x */
  418. #define    KEY_SNEXT    0614        /* shifted next key x */
  419. #define    KEY_SOPTIONS    0615        /* shifted options key x */
  420. #define    KEY_SPREVIOUS    0616        /* shifted prev key x */
  421. #define    KEY_SPRINT    0617        /* shifted print key x */
  422. #define    KEY_SREDO    0620        /* shifted redo key x */
  423. #define    KEY_SREPLACE    0621        /* shifted replace key x */
  424. #define    KEY_SRIGHT    0622        /* shifted right arrow */
  425. #define    KEY_SRSUME    0623        /* shifted resume key x */
  426. #define    KEY_SSAVE    0624        /* shifted save key x */
  427. #define    KEY_SSUSPEND    0625        /* shifted suspend key x */
  428. #define    KEY_SUNDO    0626        /* shifted undo key x */
  429. #define    KEY_SUSPEND    0627        /* suspend key x */
  430. #define    KEY_UNDO    0630        /* undo key x */
  431.  
  432. #endif
  433.